/**
 * @param {number} x
 * @param {number} y
 * @return {number}
 */
// 方法1：广度优先搜索BFS
/*
1、从v向v/11连边
2、从v向v/5连边
3、从v向v-1连边
4、从v向v+1连边
求从x到y的最短路径（BFS算最小层数）
如果用visited数组记录访问过的点，这个visited数组应该开多大？
x大于y的条件下，最短路径最大是x - y
*/
var minimumOperationsToMakeEqual = function (x, y) {
    if (x <= y) return y - x
    // x > y
    let ans = x - y // 最多x - y次
    // 如果用哈希表则无需知道vis的长度
    // 为什么是x + x - y + 1，因为最多操作x - y步就能到y，而由于四个操作是同时进行
    // 此时加1操作也同样进行了x-y次，故应该为x + x - y，又由于vis直接取的当前数，所以还需要加1（例如a.length = n，但是取不到a[n]）
    // 
    let vis = new Array(x + x - y + 1).fill(false)
    let q = [], step = 0;
    const add = (v) => {
        // v小于y，回去只能加1所以y - v，step加1，是因为调用add的时候还未走到step+=1这一步，所以需要补上
        if (v < y) ans = Math.min(ans, step + 1 + y - v)
        else if (!vis[v]) {
            vis[v] = true
            q.push(v)
        }
    }
    add(x)
    while (true) {
        let temp = q
        q = []
        for (let v of temp) {
            if (v == y) return Math.min(ans, step)
            if (v % 11 == 0) add(v / 11)
            if (v % 5 == 0) add(v / 5)
            add(v - 1)
            add(v + 1)
        }
        step += 1
    }
};
console.log(minimumOperationsToMakeEqual(26, 1));